使用RumTime机制简单实现数据归解档 | iOS

【Ios】

  • 就是懒,不想每次有新数据添加的时候,都要进行归档解档操作

图片

【归档】

  • (void)encodeWithCoder:(NSCoder*)coder{

unsignedintcount =0;

//使用class_copyIvarList 获取到 UserInfo 类里面的属性,(.h文件和.m文件里面的都能得到)
Ivar* ivars =class_copyIvarList([UserInfo class], &count);

//遍历数量
for(inti =0; i < count; i++) {

//取出对应的Ivar
Ivarivar = ivars[i];

//拿到名称
constchar* name =ivar_getName(ivar);

//OC字符串
NSString* key = [NSStringstringWithUTF8String:name];

//归档
[coderencodeObject:[selfvalueForKey:key]forKey:key];}}

//解档 跟上面的是一个意思

  • (instancetype)initWithCoder:(NSCoder*)coder

{
if(self= [superinit]) {

//属性的个数
unsignedintcount =0;

Ivar* ivars =class_copyIvarList([UserInfoclass], &count);

for(inti =0; i < count; i++) {

//取出对应的Ivar
Ivarivar = ivars[i];

//拿到名称
constchar* name =ivar_getName(ivar);

//OC字符串
NSString* key = [NSString stringWithUTF8String:name];

【解档】

idvalue = [coder decodeObjectForKey:key];

//KVC–设置值到属性上面!!!
[self setValue:value forKey:key];

}}

returnself;

}

/**

*保存用户信息

*/

-(void)saveUserInfo

{

//沙盒
NSString* temp =NSTemporaryDirectory();

NSString* filePath = [temp stringByAppendingPathComponent:@”userInfo.yt”];

//归档
[NSKeyedArchiver archiveRootObject:self toFile:filePath];

}

//至于用户退出 清空数据 同样是遍历 只不过将value设置为空就好了